#include <stdio.h>
#include <signal.h>
#include <pthread.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>

#include <serial.h>
#include <task.h>
#include <gpio.h>
#include <my_signal.h>
#include <pipe.h>
#include <common.h>


int main(int argc, char **argv)
{
    //初始化任务管理器
    task_manager_init();
    //初始化串口
    uart_init("/dev/ttyS4");
    //注册信号处理函数，处理子进程发送的信号
    setup_signal_handler();
    //初始化蜂鸣器，并创建线程
    buzzer_init();
    
    //创建串口线程
    pthread_t uart_thread;
    pthread_create(&uart_thread, NULL, uart_receive_thread, NULL);
    //创建管道通信线程
    pthread_t pipe_thread;
    pthread_create(&pipe_thread, NULL, pip_read_thread, NULL);
    struct timespec req = {5, 0};  // 休眠5秒
    struct timespec rem;
    while(1)
    {
        //主循环监控
        monitor_tasks();
        //处理人脸识别认证信号
        if(g_signal_face == 1)
        {
            uart_send("success\n");
            while (nanosleep(&req, &rem) == -1 && errno == EINTR) {
                printf_d("rem=%ld\n", rem.tv_sec);
                req = rem;  // 如果被信号中断，继续休眠剩余时间
            }
            stop_all_tasks();
            g_signal_face = 0;
        }
        usleep(500000);
    }
    buzzer_close(); //关闭蜂鸣器gpio资源
    return 0;
}